package projeto.minhasatividades.cgd;

import java.util.Collection;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import plataforma.base.cdp.Criterio;
import plataforma.base.cdp.ObjetoPagina;
import plataforma.spring.DaoDefault;
import projeto.comercial.gerenciarservico.cdp.AlocacaoAtividade;
import projeto.comercial.gerenciarservico.cdp.SituacaoAtividade;
import projeto.comercial.gerenciarservico.cdp.SituacaoServico;

@DaoDefault
public class DaoMinhasAtividades  {

	@PersistenceContext
	EntityManager em;


	public Collection<AlocacaoAtividade> recuperarTodosPaginado(ObjetoPagina objetoPagina, Long idUsuario) {
		
		StringBuilder sb = new StringBuilder();
		sb.append(" from AlocacaoAtividade al  "
				+ " left outer join fetch al.atividade"
				+ " left outer join fetch al.funcao"
				+ " left outer join fetch al.responsavel"				
				+ " where al.responsavel.usuario.id =:parId  and al.atividade.servico.situacao =:parEmExecucao  and ( al.atividade.situacao = :parExecucao or al.atividade.situacao = :parNaoIniciada )");

		if (objetoPagina.getCriteriosSimples() != null) {

			for (Criterio criterio : objetoPagina.getCriteriosSimples()) {

				sb.append(" and " + criterio.toHQL());

			}

		}
		if (objetoPagina.getCriterioOrdenacao() != null)
			sb.append(" order by "
					+ objetoPagina.getCriterioOrdenacao().toString());

		Query consulta = em.createQuery(sb.toString());
		consulta.setParameter("parId", idUsuario);		
		consulta.setParameter("parEmExecucao",SituacaoServico.EXECUCAO );
		

		consulta.setParameter("parExecucao",SituacaoAtividade.EM_ANDAMENTO );
		consulta.setParameter("parNaoIniciada",SituacaoAtividade.NAO_INICIADA );
		consulta.setFirstResult(objetoPagina.getFirstResults());
		consulta.setMaxResults(objetoPagina.getMaxResults());

		return consulta.getResultList();

	}
	
	

	public int recuperarQteTodos(ObjetoPagina objetoPagina, Long idUsuario) {
				
		StringBuilder sb = new StringBuilder();
		sb.append("select count (al.id) from AlocacaoAtividade al  "			
				+ " where al.responsavel.usuario.id =:parId ");
		
		if (objetoPagina.getCriteriosSimples() != null) {

			for (Criterio criterio : objetoPagina.getCriteriosSimples()) {
				sb.append(" and " + criterio.toHQL());
			}

		}
		Query consulta = em.createQuery(sb.toString());
		consulta.setParameter("parId", idUsuario);
		Long count = (Long) consulta.getSingleResult();

		return count.intValue();
	}


}
